<?php

abstract class Db implements IDb {

    /**
     * @var Resource     DbConnection
     * Conexao com o banco de dados
     */
    protected $DbConnection;
    /**
     * @var Object Query    tQuery
     * Objeto da ultima query executada
     */
    protected $tQuery;
    /**
     * Host do Banco
     * @var string  $StHost
     */
    private $StHost;
    /**
     * Usuario do banco
     * @var string  $StUser
     */
    private $StUser;
    /**
     * Senha do Banco
     * @var string  $StPass
     */
    private $StPass;
    /**
     * Banco a ser conectado
     * @var string  $StDatabase
     */
    private $StDatabase;

    public function getConnection($StHost, $StUser, $StPass, $StDatabase) {}
    public function selectDb()  {}
    public function close() {}
    public function exec($query) {}
    public function fetchAll() {}
    public function numRows() {}
    public function result($ItRow, $StField = false) {}
    public function lastInsertId() {}
    public function affectedRows() {}
    public function lastQueryReturn() {}
    public function beginTransaction() {}
    public function endTransaction() {}
    public function lastTransactionReturn() {}

    /**
     * @method  escape
     * Usa uma instancia mysqli para executar seu metodo para escapar uma string passada como referencia.
     * Este metodo foi adaptado para poder receber um array.
     *
     * @param  $MxValue     Mixed Reference     Array ou String que serao escapadas
     *
     * @tutorial    Nao precisa receber nada, a referencia sera trocada automaticamente.
     * @see         http://www.vivaolinux.com.br/artigo/Referencias-ou-ponteiros-em-PHP
     * @since       2011-06-24
     * @return      string
     */
    public function escape(&$MxValue) {
        $ArSearch = array(chr(92), chr(47), chr(37), chr(39), chr(34));
        $ArChoose = array('\\', '\/', '\\%', '\\\'', '\\"');
        if(is_array($MxValue)) {
            foreach($MxValue as &$StValue) {
                $StValue = str_replace($ArSearch , $ArChoose, $StValue );
            }
        } else {
            $StValue = str_replace($ArSearch , $ArChoose, $MxValue );
        }
        return true;
    }

    /**
     * Retorna o Host atual da ultima conexao com o banco
     * @return string
     */
    public function getHost() {
        return $this->StHost;
    }

    /**
     * Alterar o Host de Conexao com o banco
     * @param string $StValue
     */
    public function setHost($StValue) {
        $this->StHost = $StValue;
    }
    /**
     * Retorna o Usuario atual da ultima conexao com o banco
     * @return string
     */
    public function getUser() {
        return $this->StUser;
    }
    /**
     * Alterar o Usuario de Conexao com o banco
     * @param string $StValue
     */
    public function setUser($StValue) {
        $this->StUser = $StValue;
    }
    /**
     * Retorna a senha atual da ultima conexao com o banco
     * @return string
     */
    public function getPass() {
        return $this->StPass;
    }
    /**
     * Alterar a Senha de Conexao com o banco
     * @param string $StValue
     */
    public function setPass($StValue) {
        $this->StPass = $StValue;
    }
    /**
     * Retorna o Nome do Banco da ultima conexao com o banco
     * @return string
     */
    public function getDatabase() {
        return $this->StDatabase;
    }
    /**
     * Alterar Banco de Dados de Conexao com o banco
     * @param string $StValue
     */
    public function setDatabase($StValue) {
        $this->StDatabase = $StValue;
    }

    protected function getDbConnection() {
        return $this->DbConnection;
    }
    protected function setDbConnection($DbConnection) {
        $this->DbConnection = $DbConnection;
    }
    protected function getQuery() {
        return $this->tQuery;
    }
    protected function setQuery($tQuery) {
        $this->tQuery = $tQuery;
    }

}

?>
